package com.suzhiliang.springbootlesson.scheduled;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * Copyright (C), 2015-2019, XXX有限公司
 *
 * @ClassName: PrintTask
 * @Author: xmm
 * @Date: 2019/8/29 10:18
 * @Description: @scheduled注解用来配置到方法上来完成对应的定时任务的配置，
 *               如执行时间，间隔时间，延迟时间等等，下面我们就来详细的看下对应的属性配置
 * @Version 1.0
 */
@Component
public class PrintTask {

    //配置@Scheduled，来完成每天早上10：50触发输出内容。
    @Scheduled(cron = "0 50 10 ? * *")
    public void corn() throws Exception{
        System.out.println("corn =========>"+new Date(System.currentTimeMillis()));
    }

    //是上一个调用开始后再次调用的延时（不用等待上一次调用完成）
    //@Scheduled(fixedRate = 1*1000)
    public void fixedRate() throws Exception{
        Thread.sleep(2000);
        System.out.println("fixedRate =========>"+new Date(System.currentTimeMillis()));
    }

    //配置了该属性后会等到方法执行完成后延迟配置的时间再次执行该方法
    //@Scheduled(fixedDelay = 1*1000)
    public void fixedDelay() throws Exception{
        Thread.sleep(3000);
        System.out.println("fixedDelay =========>"+new Date(System.currentTimeMillis()));
    }

    // 该属性的作用是第一次执行延迟时间，
    // 只是做延迟的设定，并不会控制其他逻辑，所以要配合fixedDelay或者fixedRate来使用
    //@Scheduled(initialDelay = 1000*10,fixedDelay = 1*1000)
    public void initialDelay() {
        System.out.println("initialDelay =========>"+new Date(System.currentTimeMillis()));
    }






}
